ЧЕРНОВИКИ ПРИГЛАШЕНИЙ В TELEGRAM — macOS
=========================================

Python и что-либо ещё устанавливать не нужно.


КАК ЗАПУСТИТЬ
-------------

1. Распакуйте архив и перенесите «Черновики приглашений» в «Программы»
   (или в «Программы» внутри своей домашней папки). Не запускайте прямо
   из архива и не оставляйте в «Загрузках»: оттуда macOS будет каждый раз
   спрашивать доступ к папке.

2. Двойной клик по «Черновики приглашений».

3. macOS скажет, что приложение «не удалось проверить на наличие вредо-
   носного ПО». Это нормально: программа не куплена в App Store и не
   заверена у Apple. Нажмите «Готово» и один раз разрешите её вручную:

      Системные настройки -> Конфиденциальность и безопасность ->
      пролистать вниз до строки про «Черновики приглашений» ->
      «Всё равно открыть» -> Touch ID или пароль.

   Потом снова двойной клик и «Открыть». Дальше программа запускается
   как обычная, спрашивать больше не будет.

   Терминал для этого не нужен. Правый клик -> «Открыть» тоже больше не
   помогает: в macOS 15 Apple убрала этот способ.

4. Если строки в настройках нет (так бывает, если файл переложили после
   первой попытки) — то же самое делается одной командой. Найдите через
   поиск (лупа в правом верхнем углу) «Терминал», откройте, скопируйте
   строку целиком, вставьте и нажмите Enter. Подставлять ничего не надо:

      xattr -dr com.apple.quarantine ~/Applications/"Черновики приглашений.app" /Applications/"Черновики приглашений.app" 2>/dev/null; echo готово

   Скрипт-файл вместо этой строки не поможет: скачанные скрипты macOS
   проверяет наравне с программами и блокирует так же.


ОБНОВЛЕНИЯ
----------

Программа сама смотрит, не вышла ли новая версия, и предлагает обновиться.
Согласились — она скачает, заменит себя и откроется заново. Ничего
подтверждать в системе не нужно и Терминал не нужен: скачивание, сделанное
самой программой, метку карантина не получает, поэтому macOS не спрашивает
про непроверенного разработчика. Это единственный случай, когда обновление
проходит совсем молча, — потому и сделано изнутри, а не ссылкой на архив.

Проверить вручную: «Настройки» -> «Проверить обновления».

Если обновление сорвётся, старая версия останется на месте: новая копия
собирается рядом и подменяет старую только целиком.


ЧТО СПРОСИТ ПРИ ПЕРВОМ ЗАПУСКЕ
------------------------------

Откроется мастер из пяти шагов: он по скриншотам показывает, где на
my.telegram.org получить api_id и api_hash. Это делается один раз.
Позже мастер можно вызвать снова: «Настройки» -> «Показать инструкцию».


КАК ПОЛЬЗОВАТЬСЯ
----------------

Вход в Telegram — в шапке окна. Кнопка «Войти»: номер телефона, код из
чата «Telegram», при необходимости облачный пароль. Дальше программа
помнит вход.

Ниже — четыре вкладки: «Рассылка», «Контакты», «Группы», «Каналы».
Рассылка построена по шагам сверху вниз; готовый шаг помечается галочкой,
а в его заголовке видно, что выбрано. Серые значки «ⓘ» — подсказки,
текст всплывает по наведению.

  1. Кому пишем
     «Google-таблица» — вставьте ссылку и нажмите «Прочитать». Таблица
     читается заново при каждом нажатии, на диск ничего не сохраняется,
     поэтому правки в таблице подхватываются сразу. Затем выберите, чьи
     контакты берём, в списке «Кто пишет» (или ВСЕ).

     «Папка чатов в Telegram» — «Загрузить папки», затем выберите папку.
     Список папок приходит одним запросом; люди из выбранной папки
     дочитываются отдельно.

     «Сегмент контактов» — рассылка по типу контакта: клиенты, подрядчики,
     коллеги и так далее. Типы проставляются на вкладке «Контакты».

     Ниже появляется список получателей: видно, кому уйдёт черновик, с
     компанией и должностью. Галочкой слева можно кого-то исключить.
     Клик по «уже писали» снимает или ставит отметку вручную.

  2. Что пишем
     «Свой текст» — редактор прямо в окне, сохраняется сам. Имя
     подставляется вместо {NAME}. Вкладки хранят разные тексты для разных
     аудиторий, рассылается выбранная.

     Чтобы сообщения не были одинаковыми, пишите варианты прямо в тексте:
     {Мы тут проводим|Проводим|Делаем} — программа выберет один случайно.
     Сколько всего получается вариантов, видно под редактором.

     «Дорабатывать под каждого» — начало письма собирается по переписке,
     без нейросети. Тело письма при этом уходит дословно, меняется только
     приветствие:

       — «Имя, привет!» тем, с кем на «ты»; «Имя, добрый день!» — на «вы».
         С близкими и коллегами тон свободнее, чем с заказчиками;
       — извинение, если вы не ответили на сообщение, которое ждало
         ответа. За «Спасибо» и «ок» программа не извиняется;
       — оговорка, если человек уже отвечал на прошлое приглашение:
         «Помню, что тебе далеко ехать», «В прошлый раз ты передавала
         приглашение коллегам»;
       — напоминание о прошлом разговоре, если с человеком давно и
         формально не общались: «Мы общались в октябре прошлого года про
         интеграцию с 1С». Иначе холодный анонс читается как спам.
         После года молчания — «Давно не общались». Обе фразы ставятся
         только там, где разговор был на самом деле: после двух реплик
         это выглядит как навязанное знакомство, и тогда программа
         ограничивается «Напомню, я Иван из Alto»;
       — короткое «Может тебе интересно будет)», если ничего более
         конкретного сказать нечем. Формулировки взяты из ваших же писем:
         разбор 140 приглашений показал, что компанию и должность
         собеседника вы не называете, а пользу обещаете постоянно;
       — «В прошлый раз звал тебя спикером — если с ИИ у вас что-то
         внедрили, велком с докладом», если человека раньше звали
         выступать. Только по двум сегментам — «ит и digital» и «клиент»;
       — вопрос в конце тем, с кем правда переписывались: на вопрос
         отвечают, на анонс — нет. Обычно «А у тебя как дела?»;
         «И ты как сам?» — только если так в этой переписке уже
         говорили, и в роде собеседника.

     Список адресатов отсортирован: сверху те, кому приглашение уместнее.
     Считается по четырём величинам — когда было последнее сообщение,
     сколько сообщений в месяц, сколько их всего (только взаимных) и
     насколько неформально общались. Первая берётся из списка диалогов,
     остальные — кнопкой «Измерить теплоту» на вкладке «Контакты»;
     она читает переписку и не тратит ни копейки на модель.

     Клик по «✎» в списке адресатов показывает готовое письмо этому
     человеку и даёт его поправить. Правка уходит в черновик вместо
     собранного текста, а разница между предложенным и исправленным
     копится в state/edits.jsonl — по ней видно, где правила врут.

     Род, в котором вы пишете о себе («пропустил» или «пропустила»),
     программа берёт из вашего профиля Telegram. Поправить можно в
     «Настройках».

     Что получится, всегда видно в «Пробном прогоне» — он ничего не
     отправляет и никого не помечает.

     «Текст из колонки таблицы» — у каждого свой текст из таблицы.
     Колонку программа находит сама по заголовку «Сообщение» или «Текст».

  3. Проверить и разослать
     «Пробный прогон» показывает готовые тексты и никого не помечает —
     к Telegram он не обращается вообще.
     «Создать черновики» разложит очередную партию. Размер партии
     задаётся полем «По сколько за раз».
     «Стоп» останавливает после текущего человека.

Программа помнит, кому черновик уже сделан, поэтому следующая партия
берёт только оставшихся — дублей не будет. В заголовке шага 1 всегда
видно «осталось N из M». Тех, кого уже звали на это же мероприятие за
последние полгода, программа пропускает сама.


ВКЛАДКИ «КОНТАКТЫ», «ГРУППЫ», «КАНАЛЫ»
--------------------------------------

«Обновить из Telegram» выгружает список чатов: удалённые, заблокированные
и пустые в него не попадают.

«Определить типы (ИИ)» читает последние сообщения и описание профиля и
раскладывает людей по типам: ит и digital, клиент, подрядчик, коллеги,
соискатель, близкие, спам, другое. Для групп оценивается, уместно ли там
объявление. Нужен ключ OpenRouter в «Настройках»; разбор одного контакта
стоит доли копейки, уже разобранные повторно не отправляются.

Тип можно поправить правой кнопкой — программа запомнит и будет
показывать ваши правки модели как образец. Двойной клик открывает чат
в Telegram.

Между людьми держится пауза 20-45 секунд. Это не тормоза, а защита:
массовые обращения к незнакомым Telegram ограничивает.


ГДЕ ХРАНЯТСЯ ВАШИ ДАННЫЕ
------------------------

    ~/Library/Application Support/TelegramInvite/

    credentials.json  — ключи, настройки и текст приглашения.
                        Никому не показывайте.
    state/            — вход в Telegram и отметки «кому уже сделан черновик».

Открыть эту папку: «Настройки» -> «Открыть папку с файлами».

Данные лежат отдельно от самого приложения. Поэтому приложение можно
спокойно переносить, обновлять и держать в нескольких копиях — вход и
прогресс не потеряются. Папку state/ не удаляйте: без неё придётся
логиниться заново.

Вход поднимается сам при запуске: код из Telegram спрашивается только
первый раз.


НЕСКОЛЬКО ВАРИАНТОВ ТЕКСТА
--------------------------

В редакторе на шаге 3 можно написать несколько версий приглашения,
разделив их строкой из трёх дефисов:

    Привет, {NAME}! Мы проводим AI Growth Day 28 августа...
    ---
    {NAME}, привет. 28 августа в Екатеринбурге AI Growth Day...

Для каждого контакта вариант выберется случайно. Сотня совершенно
одинаковых сообщений — самый заметный признак рассылки.


ВАЖНО
-----

Программа НИЧЕГО НЕ ОТПРАВЛЯЕТ. Она только кладёт готовый текст в поле
ввода нужного диалога. Отправляете вы сами, руками, прочитав текст.
